﻿using SqlSugar;
using SqlSugarAndEntity.ConfigModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;

namespace SqlSugarAndEntity
{
    class Program
    {
        static void Main(string[] args)
        {
        #if DEBUG 
            SqlSugarClient db = new SqlSugarClient(DataBaseConfig.GetConfig());
            #region dbfirst 用数据库表生成实体用这个代码
            //try
            //{
            //    string ClassTemplate = @"{using}
            //using Core.IdCreator;
            //namespace {Namespace}
            //{
            //{ClassDescription}{SugarTable}
            //    public partial class {ClassName}
            //    {
            //           public {ClassName}()
            //           {
            //                this.ID = IDHelper.GetId();
            //                {Constructor}
            //           }
            //{PropertyName}
            //    }
            //}";
            //    // 已生成的实体 不会再进入生成逻辑
            //    List<string> ignoreTable = Assembly.Load(Assembly.GetEntryAssembly().GetName()).GetTypes()
            //        .Where(t => t.IsClass && !t.IsAbstract && t.GetCustomAttribute(typeof(SugarTable)) != null)
            //        .Select(t => t.Name)
            //        .ToList();
            //    //排除不生成的表的表达式
            //    Expression<Func<string, bool>> exp1 = t => !t.Contains('.') && !ignoreTable.Contains(t);
            //    Console.WriteLine("开始生成类库文件...");

            //    var TotalPath = Directory.GetCurrentDirectory();
            //    string[] PathArr = TotalPath.Replace("\\", "/").Split(new string[] { "/bin/" }, StringSplitOptions.None);
            //    db.DbFirst.Where(exp1.Compile())
            //        .SettingClassTemplate(old =>
            //        {
            //            return ClassTemplate;
            //        })
            //        .SettingNamespaceTemplate(old =>
            //        {
            //            return old;
            //        })//命名空间 
            //        .SettingPropertyTemplate(old =>
            //        {
            //            return old;
            //        })//属性
            //        .SettingConstructorTemplate(old =>
            //        {
            //            return old;
            //        })//构造函数
            //        .IsCreateAttribute()
            //        .CreateClassFile($"{PathArr[0]}/Entity", $"{ Assembly.GetEntryAssembly().GetName().Name}.Entity");
            //    Console.WriteLine("生成成功!");
            //}
            //catch (Exception e)
            //{
            //    Console.WriteLine($"{e.Message}");
            //}

            //Console.ReadKey();
            #endregion

            #region codefirst 如果用实体生成表就用下面这个代码
            Assembly assembly = Assembly.Load(Assembly.GetEntryAssembly().GetName());
            var EntityType = assembly.GetTypes().Where(t => !t.IsAbstract && t.GetCustomAttribute(typeof(SugarTable)) != null);
            foreach (Type entitytype in EntityType)
            {
                db.CodeFirst.SetStringDefaultLength(200).InitTables(entitytype);
            }
            #endregion
        #endif
        }


    }
}
